package com.quanxiaoha.weblog.admin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.quanxiaoha.weblog.admin.model.vo.messagewall.DeleteMessageWallReqVO;
import com.quanxiaoha.weblog.admin.model.vo.messagewall.QueryMessageWallPageListReqVO;
import com.quanxiaoha.weblog.admin.model.vo.messagewall.UpdateMessageWallStatusReqVO;
import com.quanxiaoha.weblog.admin.service.AdminMessageWallService;
import com.quanxiaoha.weblog.common.domain.dos.MessageWallDO;
import com.quanxiaoha.weblog.common.domain.mapper.MessageWallMapper;
import com.quanxiaoha.weblog.common.PageResponse;
import com.quanxiaoha.weblog.common.Response;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.time.LocalDateTime;
import java.util.Objects;

@Service
@Slf4j
public class AdminMessageWallServiceImpl extends ServiceImpl<MessageWallMapper, MessageWallDO> implements AdminMessageWallService {

    @Autowired
    private MessageWallMapper messageWallMapper;

    /**
     * 获取留言分页列表
     *
     * @param queryMessageWallPageListReqVO
     * @return
     */
    @Override
    public PageResponse<MessageWallDO> getMessagePageList(QueryMessageWallPageListReqVO queryMessageWallPageListReqVO) {
        // 设置分页参数
        Page<MessageWallDO> page = new Page<>(queryMessageWallPageListReqVO.getCurrent(), queryMessageWallPageListReqVO.getSize());

        // 构建查询条件
        LambdaQueryWrapper<MessageWallDO> wrapper = new LambdaQueryWrapper<>();
        wrapper.orderByDesc(MessageWallDO::getCreateTime);

        // 昵称模糊查询
        if (StringUtils.isNotBlank(queryMessageWallPageListReqVO.getNickname())) {
            wrapper.like(MessageWallDO::getNickname, queryMessageWallPageListReqVO.getNickname());
        }

        // 状态查询
        if (Objects.nonNull(queryMessageWallPageListReqVO.getStatus())) {
            wrapper.eq(MessageWallDO::getStatus, queryMessageWallPageListReqVO.getStatus());
        }

        // 执行分页查询
        IPage<MessageWallDO> messagePage = messageWallMapper.selectPage(page, wrapper);

        // 返回分页数据
        return PageResponse.success(messagePage, messagePage.getRecords());
    }

    /**
     * 更新留言状态
     *
     * @param updateMessageWallStatusReqVO
     * @return
     */
    @Override
    public Response updateMessageWallStatus(UpdateMessageWallStatusReqVO updateMessageWallStatusReqVO) {
        Long id = updateMessageWallStatusReqVO.getId();
        Integer status = updateMessageWallStatusReqVO.getStatus();

        // 校验状态值是否合法
        if (!status.equals(1) && !status.equals(2)) {
            return Response.fail("状态值不合法");
        }

        // 检查留言是否存在
        MessageWallDO messageWallDO = messageWallMapper.selectById(id);
        if (ObjectUtils.isEmpty(messageWallDO)) {
            return Response.fail("留言不存在");
        }

        // 构建DO对象
        MessageWallDO messageWalldO = MessageWallDO.builder()
                .id(updateMessageWallStatusReqVO.getId())
                .status(updateMessageWallStatusReqVO.getStatus())
                .build();

        // 更新留言状态
        messageWallMapper.updateById(messageWalldO);
        return Response.success();
    }

    /**
     * 删除留言
     *
     * @param deleteMessageWallReqVO
     * @return
     */
    @Override
    public Response deleteMessageWall(DeleteMessageWallReqVO deleteMessageWallReqVO) {
        Long id = deleteMessageWallReqVO.getId();

        // 检查留言是否存在
        MessageWallDO messageWallDO = messageWallMapper.selectById(id);
        if (ObjectUtils.isEmpty(messageWallDO)) {
            return Response.fail("留言不存在");
        }

        // 逻辑删除，修改isDeleted字段为1
        MessageWallDO messageWalldO = MessageWallDO.builder()
                .id(deleteMessageWallReqVO.getId())
                .isDeleted(1)
                .build();

        // 更新留言状态
        messageWallMapper.updateById(messageWalldO);
        return Response.success();
    }
}